This invention generally relates to sharing resources in virtualized environments, and more specifically, to storage device sharing in virtualized environments.
With the increased use of software defined environments such as cloud computing environments and/or software defined datacenters, there is a need for efficient virtualization along all physical resources. Most cloud computing environments heavily rely on virtualization of their resources. Best known are the technologies for central processing unit (CPU) virtualization, where many of the virtual machine concepts are now integrated into the processor architecture. Examples of these are dualities of page tables, interrupt routing, etc. This has significantly increased the performance of CPU virtualization and also contributed to the isolation properties among virtual machines that must be satisfied.
In contrast, storage I/O devices have seen limited attention for efficient sharing. In general, I/O devices are still managed indirectly by a hypervisor. Guest virtual machines interact through their device drivers to a virtual device that trapped into the hypervisor, where the storage function is then implemented against a storage device. In many cases, virtual disks (vdisks) are managed by the hypervisor as files. This leads to significant inefficiencies as disk input/outputs in the guest results in a trap into the hypervisor where a full I/O stack then needs to be traversed to translate the block access to the vdisk to a file access request, ultimately leading to a block request on the real storage device.